<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>子组件索引</title>

    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
</head>

<body>
    <div id="app">
        <h2>子组件索引</h2>

        <p>当子组件较多时，通过 this.$children 来一一遍历出我们要的一个组件实例是比较困难的，尤其是组件动态渲染时，它们的序列是不固定的。Vue 提供了子组件索引的方法，用特殊的属性 ref
            来为子组件指定一个索引名称。</p>

        <p>$refs 只在组件渲染完成后才填充，并且它时非响应式的。它仅仅作为一个直接访问子组件的应急方案，应当避免在模板或计算属性中使用$refs。</p>

        <button @click="handleRef">通过ref获取子组件实例</button>
        <my-component ref="comA"></my-component>
    </div>
</body>

<script type="text/javascript">
    // 注册组件
    Vue.component('my-component', {
        template: '<div>子组件</div>',
        data: function () {
            return {
                message: "这是子组件的message"
            };
        }
    });

    // Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统
    var vm = new Vue({
        el: "#app",
        data: {},
        methods: {
            handleRef: function () {
                var msg = this.$refs.comA.message;
                alert(msg);
            }
        }
    })
</script>

</html>